YES 28.32 H-Termination proof of /home/matraf/haskell/eval_FullyBlown_Fast/FiniteMap.hs
H-Termination of the given Haskell-Program with start terms could successfully be proven:



HASKELL
  ↳ BR

mainModule FiniteMap
  ((foldFM_LE :: (Ratio Int  ->  b  ->  a  ->  a ->  a  ->  Ratio Int  ->  FiniteMap (Ratio Int) b  ->  a) :: (Ratio Int  ->  b  ->  a  ->  a ->  a  ->  Ratio Int  ->  FiniteMap (Ratio Int) b  ->  a)

module FiniteMap where
  import qualified Maybe
import qualified Prelude

  data FiniteMap b a = EmptyFM  | Branch b a Int (FiniteMap b a) (FiniteMap b a


  instance (Eq a, Eq b) => Eq (FiniteMap b a) where 

  foldFM_LE :: Ord b => (b  ->  c  ->  a  ->  a ->  a  ->  b  ->  FiniteMap b c  ->  a
foldFM_LE k z fr EmptyFM z
foldFM_LE k z fr (Branch key elt _ fm_l fm_r
 | key <= fr = 
foldFM_LE k (k key elt (foldFM_LE k z fr fm_l)) fr fm_r
 | otherwise = 
foldFM_LE k z fr fm_l


module Maybe where
  import qualified FiniteMap
import qualified Prelude



Replaced joker patterns by fresh variables and removed binding patterns.

↳ HASKELL
  ↳ BR
HASKELL
      ↳ COR

mainModule FiniteMap
  ((foldFM_LE :: (Ratio Int  ->  b  ->  a  ->  a ->  a  ->  Ratio Int  ->  FiniteMap (Ratio Int) b  ->  a) :: (Ratio Int  ->  b  ->  a  ->  a ->  a  ->  Ratio Int  ->  FiniteMap (Ratio Int) b  ->  a)

module FiniteMap where
  import qualified Maybe
import qualified Prelude

  data FiniteMap a b = EmptyFM  | Branch a b Int (FiniteMap a b) (FiniteMap a b


  instance (Eq a, Eq b) => Eq (FiniteMap b a) where 

  foldFM_LE :: Ord a => (a  ->  b  ->  c  ->  c ->  c  ->  a  ->  FiniteMap a b  ->  c
foldFM_LE k z fr EmptyFM z
foldFM_LE k z fr (Branch key elt vw fm_l fm_r
 | key <= fr = 
foldFM_LE k (k key elt (foldFM_LE k z fr fm_l)) fr fm_r
 | otherwise = 
foldFM_LE k z fr fm_l


module Maybe where
  import qualified FiniteMap
import qualified Prelude



Cond Reductions:
The following Function with conditions
foldFM_LE k z fr EmptyFM = z
foldFM_LE k z fr (Branch key elt vw fm_l fm_r)
 | key <= fr
 = foldFM_LE k (k key elt (foldFM_LE k z fr fm_l)) fr fm_r
 | otherwise
 = foldFM_LE k z fr fm_l

is transformed to
foldFM_LE k z fr EmptyFM = foldFM_LE3 k z fr EmptyFM
foldFM_LE k z fr (Branch key elt vw fm_l fm_r) = foldFM_LE2 k z fr (Branch key elt vw fm_l fm_r)

foldFM_LE1 k z fr key elt vw fm_l fm_r True = foldFM_LE k (k key elt (foldFM_LE k z fr fm_l)) fr fm_r
foldFM_LE1 k z fr key elt vw fm_l fm_r False = foldFM_LE0 k z fr key elt vw fm_l fm_r otherwise

foldFM_LE0 k z fr key elt vw fm_l fm_r True = foldFM_LE k z fr fm_l

foldFM_LE2 k z fr (Branch key elt vw fm_l fm_r) = foldFM_LE1 k z fr key elt vw fm_l fm_r (key <= fr)

foldFM_LE3 k z fr EmptyFM = z
foldFM_LE3 wv ww wx wy = foldFM_LE2 wv ww wx wy

The following Function with conditions
undefined 
 | False
 = undefined

is transformed to
undefined  = undefined1

undefined0 True = undefined

undefined1  = undefined0 False



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
HASKELL
          ↳ Narrow

mainModule FiniteMap
  (foldFM_LE :: (Ratio Int  ->  a  ->  b  ->  b ->  b  ->  Ratio Int  ->  FiniteMap (Ratio Int) a  ->  b)

module FiniteMap where
  import qualified Maybe
import qualified Prelude

  data FiniteMap b a = EmptyFM  | Branch b a Int (FiniteMap b a) (FiniteMap b a


  instance (Eq a, Eq b) => Eq (FiniteMap a b) where 

  foldFM_LE :: Ord a => (a  ->  c  ->  b  ->  b ->  b  ->  a  ->  FiniteMap a c  ->  b
foldFM_LE k z fr EmptyFM foldFM_LE3 k z fr EmptyFM
foldFM_LE k z fr (Branch key elt vw fm_l fm_rfoldFM_LE2 k z fr (Branch key elt vw fm_l fm_r)

  
foldFM_LE0 k z fr key elt vw fm_l fm_r True foldFM_LE k z fr fm_l

  
foldFM_LE1 k z fr key elt vw fm_l fm_r True foldFM_LE k (k key elt (foldFM_LE k z fr fm_l)) fr fm_r
foldFM_LE1 k z fr key elt vw fm_l fm_r False foldFM_LE0 k z fr key elt vw fm_l fm_r otherwise

  
foldFM_LE2 k z fr (Branch key elt vw fm_l fm_rfoldFM_LE1 k z fr key elt vw fm_l fm_r (key <= fr)

  
foldFM_LE3 k z fr EmptyFM z
foldFM_LE3 wv ww wx wy foldFM_LE2 wv ww wx wy


module Maybe where
  import qualified FiniteMap
import qualified Prelude



Haskell To QDPs


↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
QDP
                ↳ QDPSizeChangeProof
              ↳ QDP
              ↳ QDP
              ↳ QDP

Q DP problem:
The TRS P consists of the following rules:

new_primPlusNat(Succ(wz51200), Succ(wz51000)) → new_primPlusNat(wz51200, wz51000)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
              ↳ QDP
QDP
                ↳ QDPSizeChangeProof
              ↳ QDP
              ↳ QDP

Q DP problem:
The TRS P consists of the following rules:

new_primMulNat(Succ(wz60000), Succ(wz5100)) → new_primMulNat(wz60000, Succ(wz5100))

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
              ↳ QDP
              ↳ QDP
QDP
                ↳ QDPSizeChangeProof
              ↳ QDP

Q DP problem:
The TRS P consists of the following rules:

new_primCmpNat(Succ(wz5050000), Succ(wz500000)) → new_primCmpNat(wz5050000, wz500000)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
              ↳ QDP
              ↳ QDP
              ↳ QDP
QDP
                ↳ UsableRulesProof

Q DP problem:
The TRS P consists of the following rules:

new_foldFM_LE(wz498, wz500, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), wz505, False, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb)
new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, new_ltEs0(wz5050, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, EmptyFM, True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)

The TRS R consists of the following rules:

new_ltEs(wz5040, wz500, app(ty_[], bc)) → new_ltEs4(wz5040, wz500, bc)
new_sr(Neg(wz6000), Neg(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_ltEs9(wz5050, wz500, bg) → new_not(new_compare1(wz5050, wz500, bg))
new_compare(Neg(Zero), Neg(Zero)) → EQ
new_ltEs0(wz5050, wz500, ty_Integer) → new_ltEs12(wz5050, wz500)
new_primCmpNat1(Succ(wz5050000), Succ(wz500000)) → new_primCmpNat1(wz5050000, wz500000)
new_compare0(wz5050, wz500) → error([])
new_ltEs(wz5040, wz500, ty_Ordering) → new_ltEs7(wz5040, wz500)
new_ltEs0(wz5050, wz500, ty_Double) → new_ltEs8(wz5050, wz500)
new_foldFM_LE0(wz498, wz499, wz500, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), h, ba, bb) → new_foldFM_LE10(wz498, wz499, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Integer) → new_compare0(new_sr0(wz50500, wz5001), new_sr0(wz5000, wz50501))
new_primCmpNat2(Zero, wz505000) → LT
new_sr(Pos(wz6000), Pos(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_ltEs(wz5040, wz500, ty_@0) → new_ltEs10(wz5040, wz500)
new_ltEs2(wz5050, wz500) → new_not(error([]))
new_compare(Pos(Zero), Neg(Zero)) → EQ
new_compare(Neg(Zero), Pos(Zero)) → EQ
new_ltEs5(wz5050, wz500, bd, be) → new_not(error([]))
new_sr0(wz50500, wz5001) → error([])
new_ltEs8(wz5050, wz500) → new_not(error([]))
new_ltEs0(wz5050, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5050, wz500, bg)
new_primPlusNat1(Zero, wz5100) → Succ(wz5100)
new_ltEs0(wz5050, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5050, wz500, cb, cc, cd)
new_primMulNat0(Succ(wz60000), Zero) → Zero
new_primMulNat0(Zero, Succ(wz5100)) → Zero
new_ltEs0(wz5050, wz500, ty_Char) → new_ltEs2(wz5050, wz500)
new_ltEs(wz5040, wz500, ty_Double) → new_ltEs8(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Float) → new_ltEs3(wz5040, wz500)
new_ltEs(wz5040, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5040, wz500, bd, be)
new_ltEs0(wz5050, wz500, ty_Float) → new_ltEs3(wz5050, wz500)
new_primMulNat0(Succ(wz60000), Succ(wz5100)) → new_primPlusNat1(new_primMulNat0(wz60000, Succ(wz5100)), wz5100)
new_primPlusNat0(Succ(wz51200), Succ(wz51000)) → Succ(Succ(new_primPlusNat0(wz51200, wz51000)))
new_foldFM_LE0(wz498, wz499, wz500, EmptyFM, h, ba, bb) → wz499
new_compare(Neg(Succ(wz505000)), Neg(wz5000)) → new_primCmpNat2(wz5000, wz505000)
new_compare(Pos(Zero), Pos(Succ(wz50000))) → new_primCmpNat2(Zero, wz50000)
new_ltEs0(wz5050, wz500, ty_Int) → new_ltEs1(wz5050, wz500)
new_primCmpNat1(Zero, Succ(wz500000)) → LT
new_primPlusNat0(Zero, Zero) → Zero
new_ltEs11(wz5050, wz500, bh, ca) → new_not(error([]))
new_primCmpNat2(Succ(wz50000), wz505000) → new_primCmpNat1(wz50000, wz505000)
new_ltEs0(wz5050, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5050, wz500, bd, be)
new_not(EQ) → new_not0
new_ltEs0(wz5050, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5050, wz500, bh, ca)
new_ltEs(wz5040, wz500, ty_Bool) → new_ltEs13(wz5040, wz500)
new_ltEs6(wz5050, wz500, bf) → new_not(error([]))
new_ltEs(wz5040, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5040, wz500, bh, ca)
new_primCmpNat1(Zero, Zero) → EQ
new_primCmpNat0(wz505000, Zero) → GT
new_ltEs(wz5040, wz500, ty_Int) → new_ltEs1(wz5040, wz500)
new_ltEs1(wz5050, wz500) → new_not(new_compare(wz5050, wz500))
new_primMulNat0(Zero, Zero) → Zero
new_ltEs(wz5040, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5040, wz500, bf)
new_compare(Neg(Zero), Pos(Succ(wz50000))) → LT
new_primPlusNat1(Succ(wz5120), wz5100) → Succ(Succ(new_primPlusNat0(wz5120, wz5100)))
new_ltEs7(wz5050, wz500) → new_not(error([]))
new_ltEs10(wz5050, wz500) → new_not(error([]))
new_ltEs0(wz5050, wz500, ty_@0) → new_ltEs10(wz5050, wz500)
new_ltEs(wz5040, wz500, ty_Char) → new_ltEs2(wz5040, wz500)
new_ltEs4(wz5050, wz500, bc) → new_not(error([]))
new_ltEs(wz5040, wz500, ty_Integer) → new_ltEs12(wz5040, wz500)
new_ltEs(wz5040, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5040, wz500, bg)
new_ltEs12(wz5050, wz500) → new_not(new_compare0(wz5050, wz500))
new_primCmpNat1(Succ(wz5050000), Zero) → GT
new_compare(Pos(Succ(wz505000)), Neg(wz5000)) → GT
new_compare(Pos(Succ(wz505000)), Pos(wz5000)) → new_primCmpNat0(wz505000, wz5000)
new_ltEs0(wz5050, wz500, app(ty_[], bc)) → new_ltEs4(wz5050, wz500, bc)
new_ltEs(wz5040, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5040, wz500, cb, cc, cd)
new_not(GT) → False
new_compare(Pos(Zero), Neg(Succ(wz50000))) → GT
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Int) → new_compare(new_sr(wz50500, wz5001), new_sr(wz5000, wz50501))
new_not0True
new_compare(Neg(Succ(wz505000)), Pos(wz5000)) → LT
new_sr(Pos(wz6000), Neg(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_sr(Neg(wz6000), Pos(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_compare(Neg(Zero), Neg(Succ(wz50000))) → new_primCmpNat0(wz50000, Zero)
new_ltEs0(wz5050, wz500, ty_Ordering) → new_ltEs7(wz5050, wz500)
new_compare(Pos(Zero), Pos(Zero)) → EQ
new_ltEs3(wz5050, wz500) → new_not(error([]))
new_ltEs0(wz5050, wz500, ty_Bool) → new_ltEs13(wz5050, wz500)
new_ltEs13(wz5050, wz500) → new_not(error([]))
new_primCmpNat0(wz505000, Succ(wz50000)) → new_primCmpNat1(wz505000, wz50000)
new_ltEs0(wz5050, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5050, wz500, bf)
new_primPlusNat0(Zero, Succ(wz51000)) → Succ(wz51000)
new_primPlusNat0(Succ(wz51200), Zero) → Succ(wz51200)
new_not(LT) → new_not0
new_ltEs14(wz5050, wz500, cb, cc, cd) → new_not(error([]))

The set Q consists of the following terms:

new_ltEs0(x0, x1, ty_Char)
new_not(GT)
new_compare1(:%(x0, x1), :%(x2, x3), ty_Integer)
new_ltEs0(x0, x1, ty_@0)
new_ltEs0(x0, x1, ty_Double)
new_sr(Pos(x0), Neg(x1))
new_sr(Neg(x0), Pos(x1))
new_primMulNat0(Succ(x0), Zero)
new_primMulNat0(Zero, Succ(x0))
new_compare0(x0, x1)
new_primMulNat0(Zero, Zero)
new_primPlusNat1(Zero, x0)
new_ltEs(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(ty_Ratio, x2))
new_sr(Pos(x0), Pos(x1))
new_ltEs0(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs(x0, x1, app(app(ty_@2, x2), x3))
new_foldFM_LE0(x0, x1, x2, Branch(x3, x4, x5, x6, x7), x8, x9, x10)
new_primCmpNat0(x0, Zero)
new_ltEs10(x0, x1)
new_primPlusNat0(Succ(x0), Succ(x1))
new_ltEs0(x0, x1, ty_Integer)
new_ltEs(x0, x1, ty_Int)
new_primCmpNat0(x0, Succ(x1))
new_ltEs7(x0, x1)
new_ltEs8(x0, x1)
new_ltEs0(x0, x1, ty_Bool)
new_ltEs0(x0, x1, app(ty_Maybe, x2))
new_ltEs(x0, x1, ty_Ordering)
new_compare(Neg(Succ(x0)), Neg(x1))
new_ltEs0(x0, x1, app(app(ty_@2, x2), x3))
new_compare(Neg(Zero), Neg(Succ(x0)))
new_compare(Pos(Zero), Neg(Zero))
new_compare(Neg(Zero), Pos(Zero))
new_ltEs4(x0, x1, x2)
new_ltEs11(x0, x1, x2, x3)
new_not0
new_primPlusNat0(Zero, Zero)
new_compare(Pos(Succ(x0)), Pos(x1))
new_ltEs(x0, x1, ty_@0)
new_ltEs(x0, x1, ty_Bool)
new_ltEs0(x0, x1, ty_Ordering)
new_sr0(x0, x1)
new_primCmpNat2(Succ(x0), x1)
new_primPlusNat0(Succ(x0), Zero)
new_primCmpNat1(Succ(x0), Zero)
new_primCmpNat1(Zero, Zero)
new_ltEs3(x0, x1)
new_not(EQ)
new_ltEs(x0, x1, ty_Float)
new_compare(Neg(Zero), Neg(Zero))
new_ltEs0(x0, x1, app(ty_Ratio, x2))
new_compare(Pos(Zero), Pos(Zero))
new_primPlusNat1(Succ(x0), x1)
new_primCmpNat1(Zero, Succ(x0))
new_ltEs0(x0, x1, app(ty_[], x2))
new_ltEs1(x0, x1)
new_ltEs(x0, x1, ty_Double)
new_ltEs(x0, x1, app(ty_Maybe, x2))
new_ltEs13(x0, x1)
new_ltEs(x0, x1, ty_Integer)
new_sr(Neg(x0), Neg(x1))
new_foldFM_LE0(x0, x1, x2, EmptyFM, x3, x4, x5)
new_compare1(:%(x0, x1), :%(x2, x3), ty_Int)
new_ltEs0(x0, x1, ty_Int)
new_ltEs(x0, x1, ty_Char)
new_ltEs0(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs12(x0, x1)
new_primMulNat0(Succ(x0), Succ(x1))
new_ltEs6(x0, x1, x2)
new_compare(Pos(Zero), Pos(Succ(x0)))
new_not(LT)
new_primCmpNat2(Zero, x0)
new_ltEs(x0, x1, app(ty_[], x2))
new_primPlusNat0(Zero, Succ(x0))
new_primCmpNat1(Succ(x0), Succ(x1))
new_ltEs14(x0, x1, x2, x3, x4)
new_ltEs5(x0, x1, x2, x3)
new_compare(Neg(Succ(x0)), Pos(x1))
new_compare(Pos(Succ(x0)), Neg(x1))
new_ltEs2(x0, x1)
new_compare(Pos(Zero), Neg(Succ(x0)))
new_compare(Neg(Zero), Pos(Succ(x0)))
new_ltEs9(x0, x1, x2)
new_ltEs0(x0, x1, ty_Float)

We have to consider all minimal (P,Q,R)-chains.
As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [15] we can delete all non-usable rules [17] from R.

↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
              ↳ QDP
              ↳ QDP
              ↳ QDP
              ↳ QDP
                ↳ UsableRulesProof
QDP
                    ↳ QReductionProof

Q DP problem:
The TRS P consists of the following rules:

new_foldFM_LE(wz498, wz500, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), wz505, False, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb)
new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, new_ltEs0(wz5050, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, EmptyFM, True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)

The TRS R consists of the following rules:

new_ltEs0(wz5050, wz500, ty_Integer) → new_ltEs12(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Double) → new_ltEs8(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5050, wz500, bg)
new_ltEs0(wz5050, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5050, wz500, cb, cc, cd)
new_ltEs0(wz5050, wz500, ty_Char) → new_ltEs2(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Float) → new_ltEs3(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Int) → new_ltEs1(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5050, wz500, bd, be)
new_ltEs0(wz5050, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5050, wz500, bh, ca)
new_ltEs0(wz5050, wz500, ty_@0) → new_ltEs10(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_[], bc)) → new_ltEs4(wz5050, wz500, bc)
new_ltEs0(wz5050, wz500, ty_Ordering) → new_ltEs7(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Bool) → new_ltEs13(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5050, wz500, bf)
new_ltEs6(wz5050, wz500, bf) → new_not(error([]))
new_ltEs13(wz5050, wz500) → new_not(error([]))
new_ltEs7(wz5050, wz500) → new_not(error([]))
new_ltEs4(wz5050, wz500, bc) → new_not(error([]))
new_ltEs10(wz5050, wz500) → new_not(error([]))
new_ltEs11(wz5050, wz500, bh, ca) → new_not(error([]))
new_ltEs5(wz5050, wz500, bd, be) → new_not(error([]))
new_ltEs1(wz5050, wz500) → new_not(new_compare(wz5050, wz500))
new_compare(Neg(Zero), Neg(Zero)) → EQ
new_compare(Pos(Zero), Neg(Zero)) → EQ
new_compare(Neg(Zero), Pos(Zero)) → EQ
new_compare(Neg(Succ(wz505000)), Neg(wz5000)) → new_primCmpNat2(wz5000, wz505000)
new_compare(Pos(Zero), Pos(Succ(wz50000))) → new_primCmpNat2(Zero, wz50000)
new_compare(Neg(Zero), Pos(Succ(wz50000))) → LT
new_compare(Pos(Succ(wz505000)), Neg(wz5000)) → GT
new_compare(Pos(Succ(wz505000)), Pos(wz5000)) → new_primCmpNat0(wz505000, wz5000)
new_compare(Pos(Zero), Neg(Succ(wz50000))) → GT
new_compare(Neg(Succ(wz505000)), Pos(wz5000)) → LT
new_compare(Neg(Zero), Neg(Succ(wz50000))) → new_primCmpNat0(wz50000, Zero)
new_compare(Pos(Zero), Pos(Zero)) → EQ
new_not(EQ) → new_not0
new_not(GT) → False
new_not(LT) → new_not0
new_not0True
new_primCmpNat0(wz505000, Zero) → GT
new_primCmpNat0(wz505000, Succ(wz50000)) → new_primCmpNat1(wz505000, wz50000)
new_primCmpNat1(Succ(wz5050000), Succ(wz500000)) → new_primCmpNat1(wz5050000, wz500000)
new_primCmpNat1(Zero, Succ(wz500000)) → LT
new_primCmpNat1(Zero, Zero) → EQ
new_primCmpNat1(Succ(wz5050000), Zero) → GT
new_primCmpNat2(Zero, wz505000) → LT
new_primCmpNat2(Succ(wz50000), wz505000) → new_primCmpNat1(wz50000, wz505000)
new_ltEs3(wz5050, wz500) → new_not(error([]))
new_ltEs2(wz5050, wz500) → new_not(error([]))
new_ltEs14(wz5050, wz500, cb, cc, cd) → new_not(error([]))
new_ltEs9(wz5050, wz500, bg) → new_not(new_compare1(wz5050, wz500, bg))
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Integer) → new_compare0(new_sr0(wz50500, wz5001), new_sr0(wz5000, wz50501))
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Int) → new_compare(new_sr(wz50500, wz5001), new_sr(wz5000, wz50501))
new_sr(Neg(wz6000), Neg(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_sr(Pos(wz6000), Pos(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_sr(Pos(wz6000), Neg(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_sr(Neg(wz6000), Pos(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_primMulNat0(Succ(wz60000), Zero) → Zero
new_primMulNat0(Zero, Succ(wz5100)) → Zero
new_primMulNat0(Succ(wz60000), Succ(wz5100)) → new_primPlusNat1(new_primMulNat0(wz60000, Succ(wz5100)), wz5100)
new_primMulNat0(Zero, Zero) → Zero
new_primPlusNat1(Zero, wz5100) → Succ(wz5100)
new_primPlusNat1(Succ(wz5120), wz5100) → Succ(Succ(new_primPlusNat0(wz5120, wz5100)))
new_primPlusNat0(Succ(wz51200), Succ(wz51000)) → Succ(Succ(new_primPlusNat0(wz51200, wz51000)))
new_primPlusNat0(Zero, Zero) → Zero
new_primPlusNat0(Zero, Succ(wz51000)) → Succ(wz51000)
new_primPlusNat0(Succ(wz51200), Zero) → Succ(wz51200)
new_sr0(wz50500, wz5001) → error([])
new_compare0(wz5050, wz500) → error([])
new_ltEs8(wz5050, wz500) → new_not(error([]))
new_ltEs12(wz5050, wz500) → new_not(new_compare0(wz5050, wz500))
new_ltEs(wz5040, wz500, app(ty_[], bc)) → new_ltEs4(wz5040, wz500, bc)
new_ltEs(wz5040, wz500, ty_Ordering) → new_ltEs7(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_@0) → new_ltEs10(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Double) → new_ltEs8(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Float) → new_ltEs3(wz5040, wz500)
new_ltEs(wz5040, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5040, wz500, bd, be)
new_ltEs(wz5040, wz500, ty_Bool) → new_ltEs13(wz5040, wz500)
new_ltEs(wz5040, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5040, wz500, bh, ca)
new_ltEs(wz5040, wz500, ty_Int) → new_ltEs1(wz5040, wz500)
new_ltEs(wz5040, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5040, wz500, bf)
new_ltEs(wz5040, wz500, ty_Char) → new_ltEs2(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Integer) → new_ltEs12(wz5040, wz500)
new_ltEs(wz5040, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5040, wz500, bg)
new_ltEs(wz5040, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5040, wz500, cb, cc, cd)

The set Q consists of the following terms:

new_ltEs0(x0, x1, ty_Char)
new_not(GT)
new_compare1(:%(x0, x1), :%(x2, x3), ty_Integer)
new_ltEs0(x0, x1, ty_@0)
new_ltEs0(x0, x1, ty_Double)
new_sr(Pos(x0), Neg(x1))
new_sr(Neg(x0), Pos(x1))
new_primMulNat0(Succ(x0), Zero)
new_primMulNat0(Zero, Succ(x0))
new_compare0(x0, x1)
new_primMulNat0(Zero, Zero)
new_primPlusNat1(Zero, x0)
new_ltEs(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(ty_Ratio, x2))
new_sr(Pos(x0), Pos(x1))
new_ltEs0(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs(x0, x1, app(app(ty_@2, x2), x3))
new_foldFM_LE0(x0, x1, x2, Branch(x3, x4, x5, x6, x7), x8, x9, x10)
new_primCmpNat0(x0, Zero)
new_ltEs10(x0, x1)
new_primPlusNat0(Succ(x0), Succ(x1))
new_ltEs0(x0, x1, ty_Integer)
new_ltEs(x0, x1, ty_Int)
new_primCmpNat0(x0, Succ(x1))
new_ltEs7(x0, x1)
new_ltEs8(x0, x1)
new_ltEs0(x0, x1, ty_Bool)
new_ltEs0(x0, x1, app(ty_Maybe, x2))
new_ltEs(x0, x1, ty_Ordering)
new_compare(Neg(Succ(x0)), Neg(x1))
new_ltEs0(x0, x1, app(app(ty_@2, x2), x3))
new_compare(Neg(Zero), Neg(Succ(x0)))
new_compare(Pos(Zero), Neg(Zero))
new_compare(Neg(Zero), Pos(Zero))
new_ltEs4(x0, x1, x2)
new_ltEs11(x0, x1, x2, x3)
new_not0
new_primPlusNat0(Zero, Zero)
new_compare(Pos(Succ(x0)), Pos(x1))
new_ltEs(x0, x1, ty_@0)
new_ltEs(x0, x1, ty_Bool)
new_ltEs0(x0, x1, ty_Ordering)
new_sr0(x0, x1)
new_primCmpNat2(Succ(x0), x1)
new_primPlusNat0(Succ(x0), Zero)
new_primCmpNat1(Succ(x0), Zero)
new_primCmpNat1(Zero, Zero)
new_ltEs3(x0, x1)
new_not(EQ)
new_ltEs(x0, x1, ty_Float)
new_compare(Neg(Zero), Neg(Zero))
new_ltEs0(x0, x1, app(ty_Ratio, x2))
new_compare(Pos(Zero), Pos(Zero))
new_primPlusNat1(Succ(x0), x1)
new_primCmpNat1(Zero, Succ(x0))
new_ltEs0(x0, x1, app(ty_[], x2))
new_ltEs1(x0, x1)
new_ltEs(x0, x1, ty_Double)
new_ltEs(x0, x1, app(ty_Maybe, x2))
new_ltEs13(x0, x1)
new_ltEs(x0, x1, ty_Integer)
new_sr(Neg(x0), Neg(x1))
new_foldFM_LE0(x0, x1, x2, EmptyFM, x3, x4, x5)
new_compare1(:%(x0, x1), :%(x2, x3), ty_Int)
new_ltEs0(x0, x1, ty_Int)
new_ltEs(x0, x1, ty_Char)
new_ltEs0(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs12(x0, x1)
new_primMulNat0(Succ(x0), Succ(x1))
new_ltEs6(x0, x1, x2)
new_compare(Pos(Zero), Pos(Succ(x0)))
new_not(LT)
new_primCmpNat2(Zero, x0)
new_ltEs(x0, x1, app(ty_[], x2))
new_primPlusNat0(Zero, Succ(x0))
new_primCmpNat1(Succ(x0), Succ(x1))
new_ltEs14(x0, x1, x2, x3, x4)
new_ltEs5(x0, x1, x2, x3)
new_compare(Neg(Succ(x0)), Pos(x1))
new_compare(Pos(Succ(x0)), Neg(x1))
new_ltEs2(x0, x1)
new_compare(Pos(Zero), Neg(Succ(x0)))
new_compare(Neg(Zero), Pos(Succ(x0)))
new_ltEs9(x0, x1, x2)
new_ltEs0(x0, x1, ty_Float)

We have to consider all minimal (P,Q,R)-chains.
We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.

new_foldFM_LE0(x0, x1, x2, Branch(x3, x4, x5, x6, x7), x8, x9, x10)
new_foldFM_LE0(x0, x1, x2, EmptyFM, x3, x4, x5)



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ Narrow
            ↳ AND
              ↳ QDP
              ↳ QDP
              ↳ QDP
              ↳ QDP
                ↳ UsableRulesProof
                  ↳ QDP
                    ↳ QReductionProof
QDP
                        ↳ QDPSizeChangeProof

Q DP problem:
The TRS P consists of the following rules:

new_foldFM_LE(wz498, wz500, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)
new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, new_ltEs0(wz5050, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, Branch(wz5050, wz5051, wz5052, wz5053, wz5054), True, h, ba, bb) → new_foldFM_LE2(wz498, wz501, wz502, wz500, wz5050, wz5051, wz5052, wz5053, wz5054, h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, Branch(wz5040, wz5041, wz5042, wz5043, wz5044), wz505, False, h, ba, bb) → new_foldFM_LE1(wz498, wz500, wz5040, wz5041, wz5042, wz5043, wz5044, new_ltEs(wz5040, wz500, ba), h, ba, bb)
new_foldFM_LE1(wz498, wz500, wz501, wz502, wz503, wz504, EmptyFM, True, h, ba, bb) → new_foldFM_LE(wz498, wz500, wz504, h, ba, bb)

The TRS R consists of the following rules:

new_ltEs0(wz5050, wz500, ty_Integer) → new_ltEs12(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Double) → new_ltEs8(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5050, wz500, bg)
new_ltEs0(wz5050, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5050, wz500, cb, cc, cd)
new_ltEs0(wz5050, wz500, ty_Char) → new_ltEs2(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Float) → new_ltEs3(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Int) → new_ltEs1(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5050, wz500, bd, be)
new_ltEs0(wz5050, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5050, wz500, bh, ca)
new_ltEs0(wz5050, wz500, ty_@0) → new_ltEs10(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_[], bc)) → new_ltEs4(wz5050, wz500, bc)
new_ltEs0(wz5050, wz500, ty_Ordering) → new_ltEs7(wz5050, wz500)
new_ltEs0(wz5050, wz500, ty_Bool) → new_ltEs13(wz5050, wz500)
new_ltEs0(wz5050, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5050, wz500, bf)
new_ltEs6(wz5050, wz500, bf) → new_not(error([]))
new_ltEs13(wz5050, wz500) → new_not(error([]))
new_ltEs7(wz5050, wz500) → new_not(error([]))
new_ltEs4(wz5050, wz500, bc) → new_not(error([]))
new_ltEs10(wz5050, wz500) → new_not(error([]))
new_ltEs11(wz5050, wz500, bh, ca) → new_not(error([]))
new_ltEs5(wz5050, wz500, bd, be) → new_not(error([]))
new_ltEs1(wz5050, wz500) → new_not(new_compare(wz5050, wz500))
new_compare(Neg(Zero), Neg(Zero)) → EQ
new_compare(Pos(Zero), Neg(Zero)) → EQ
new_compare(Neg(Zero), Pos(Zero)) → EQ
new_compare(Neg(Succ(wz505000)), Neg(wz5000)) → new_primCmpNat2(wz5000, wz505000)
new_compare(Pos(Zero), Pos(Succ(wz50000))) → new_primCmpNat2(Zero, wz50000)
new_compare(Neg(Zero), Pos(Succ(wz50000))) → LT
new_compare(Pos(Succ(wz505000)), Neg(wz5000)) → GT
new_compare(Pos(Succ(wz505000)), Pos(wz5000)) → new_primCmpNat0(wz505000, wz5000)
new_compare(Pos(Zero), Neg(Succ(wz50000))) → GT
new_compare(Neg(Succ(wz505000)), Pos(wz5000)) → LT
new_compare(Neg(Zero), Neg(Succ(wz50000))) → new_primCmpNat0(wz50000, Zero)
new_compare(Pos(Zero), Pos(Zero)) → EQ
new_not(EQ) → new_not0
new_not(GT) → False
new_not(LT) → new_not0
new_not0True
new_primCmpNat0(wz505000, Zero) → GT
new_primCmpNat0(wz505000, Succ(wz50000)) → new_primCmpNat1(wz505000, wz50000)
new_primCmpNat1(Succ(wz5050000), Succ(wz500000)) → new_primCmpNat1(wz5050000, wz500000)
new_primCmpNat1(Zero, Succ(wz500000)) → LT
new_primCmpNat1(Zero, Zero) → EQ
new_primCmpNat1(Succ(wz5050000), Zero) → GT
new_primCmpNat2(Zero, wz505000) → LT
new_primCmpNat2(Succ(wz50000), wz505000) → new_primCmpNat1(wz50000, wz505000)
new_ltEs3(wz5050, wz500) → new_not(error([]))
new_ltEs2(wz5050, wz500) → new_not(error([]))
new_ltEs14(wz5050, wz500, cb, cc, cd) → new_not(error([]))
new_ltEs9(wz5050, wz500, bg) → new_not(new_compare1(wz5050, wz500, bg))
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Integer) → new_compare0(new_sr0(wz50500, wz5001), new_sr0(wz5000, wz50501))
new_compare1(:%(wz50500, wz50501), :%(wz5000, wz5001), ty_Int) → new_compare(new_sr(wz50500, wz5001), new_sr(wz5000, wz50501))
new_sr(Neg(wz6000), Neg(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_sr(Pos(wz6000), Pos(wz510)) → Pos(new_primMulNat0(wz6000, wz510))
new_sr(Pos(wz6000), Neg(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_sr(Neg(wz6000), Pos(wz510)) → Neg(new_primMulNat0(wz6000, wz510))
new_primMulNat0(Succ(wz60000), Zero) → Zero
new_primMulNat0(Zero, Succ(wz5100)) → Zero
new_primMulNat0(Succ(wz60000), Succ(wz5100)) → new_primPlusNat1(new_primMulNat0(wz60000, Succ(wz5100)), wz5100)
new_primMulNat0(Zero, Zero) → Zero
new_primPlusNat1(Zero, wz5100) → Succ(wz5100)
new_primPlusNat1(Succ(wz5120), wz5100) → Succ(Succ(new_primPlusNat0(wz5120, wz5100)))
new_primPlusNat0(Succ(wz51200), Succ(wz51000)) → Succ(Succ(new_primPlusNat0(wz51200, wz51000)))
new_primPlusNat0(Zero, Zero) → Zero
new_primPlusNat0(Zero, Succ(wz51000)) → Succ(wz51000)
new_primPlusNat0(Succ(wz51200), Zero) → Succ(wz51200)
new_sr0(wz50500, wz5001) → error([])
new_compare0(wz5050, wz500) → error([])
new_ltEs8(wz5050, wz500) → new_not(error([]))
new_ltEs12(wz5050, wz500) → new_not(new_compare0(wz5050, wz500))
new_ltEs(wz5040, wz500, app(ty_[], bc)) → new_ltEs4(wz5040, wz500, bc)
new_ltEs(wz5040, wz500, ty_Ordering) → new_ltEs7(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_@0) → new_ltEs10(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Double) → new_ltEs8(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Float) → new_ltEs3(wz5040, wz500)
new_ltEs(wz5040, wz500, app(app(ty_Either, bd), be)) → new_ltEs5(wz5040, wz500, bd, be)
new_ltEs(wz5040, wz500, ty_Bool) → new_ltEs13(wz5040, wz500)
new_ltEs(wz5040, wz500, app(app(ty_@2, bh), ca)) → new_ltEs11(wz5040, wz500, bh, ca)
new_ltEs(wz5040, wz500, ty_Int) → new_ltEs1(wz5040, wz500)
new_ltEs(wz5040, wz500, app(ty_Maybe, bf)) → new_ltEs6(wz5040, wz500, bf)
new_ltEs(wz5040, wz500, ty_Char) → new_ltEs2(wz5040, wz500)
new_ltEs(wz5040, wz500, ty_Integer) → new_ltEs12(wz5040, wz500)
new_ltEs(wz5040, wz500, app(ty_Ratio, bg)) → new_ltEs9(wz5040, wz500, bg)
new_ltEs(wz5040, wz500, app(app(app(ty_@3, cb), cc), cd)) → new_ltEs14(wz5040, wz500, cb, cc, cd)

The set Q consists of the following terms:

new_ltEs0(x0, x1, ty_Char)
new_not(GT)
new_compare1(:%(x0, x1), :%(x2, x3), ty_Integer)
new_ltEs0(x0, x1, ty_@0)
new_ltEs0(x0, x1, ty_Double)
new_sr(Pos(x0), Neg(x1))
new_sr(Neg(x0), Pos(x1))
new_primMulNat0(Succ(x0), Zero)
new_primMulNat0(Zero, Succ(x0))
new_compare0(x0, x1)
new_primMulNat0(Zero, Zero)
new_primPlusNat1(Zero, x0)
new_ltEs(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(ty_Ratio, x2))
new_sr(Pos(x0), Pos(x1))
new_ltEs0(x0, x1, app(app(app(ty_@3, x2), x3), x4))
new_ltEs(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs(x0, x1, app(app(ty_@2, x2), x3))
new_primCmpNat0(x0, Zero)
new_ltEs10(x0, x1)
new_primPlusNat0(Succ(x0), Succ(x1))
new_ltEs0(x0, x1, ty_Integer)
new_ltEs(x0, x1, ty_Int)
new_primCmpNat0(x0, Succ(x1))
new_ltEs7(x0, x1)
new_ltEs8(x0, x1)
new_ltEs0(x0, x1, ty_Bool)
new_ltEs0(x0, x1, app(ty_Maybe, x2))
new_ltEs(x0, x1, ty_Ordering)
new_compare(Neg(Succ(x0)), Neg(x1))
new_ltEs0(x0, x1, app(app(ty_@2, x2), x3))
new_compare(Neg(Zero), Neg(Succ(x0)))
new_compare(Pos(Zero), Neg(Zero))
new_compare(Neg(Zero), Pos(Zero))
new_ltEs4(x0, x1, x2)
new_ltEs11(x0, x1, x2, x3)
new_not0
new_primPlusNat0(Zero, Zero)
new_compare(Pos(Succ(x0)), Pos(x1))
new_ltEs(x0, x1, ty_@0)
new_ltEs(x0, x1, ty_Bool)
new_ltEs0(x0, x1, ty_Ordering)
new_sr0(x0, x1)
new_primCmpNat2(Succ(x0), x1)
new_primPlusNat0(Succ(x0), Zero)
new_primCmpNat1(Succ(x0), Zero)
new_primCmpNat1(Zero, Zero)
new_ltEs3(x0, x1)
new_not(EQ)
new_ltEs(x0, x1, ty_Float)
new_compare(Neg(Zero), Neg(Zero))
new_ltEs0(x0, x1, app(ty_Ratio, x2))
new_compare(Pos(Zero), Pos(Zero))
new_primPlusNat1(Succ(x0), x1)
new_primCmpNat1(Zero, Succ(x0))
new_ltEs0(x0, x1, app(ty_[], x2))
new_ltEs1(x0, x1)
new_ltEs(x0, x1, ty_Double)
new_ltEs(x0, x1, app(ty_Maybe, x2))
new_ltEs13(x0, x1)
new_ltEs(x0, x1, ty_Integer)
new_sr(Neg(x0), Neg(x1))
new_compare1(:%(x0, x1), :%(x2, x3), ty_Int)
new_ltEs0(x0, x1, ty_Int)
new_ltEs(x0, x1, ty_Char)
new_ltEs0(x0, x1, app(app(ty_Either, x2), x3))
new_ltEs12(x0, x1)
new_primMulNat0(Succ(x0), Succ(x1))
new_ltEs6(x0, x1, x2)
new_compare(Pos(Zero), Pos(Succ(x0)))
new_not(LT)
new_primCmpNat2(Zero, x0)
new_ltEs(x0, x1, app(ty_[], x2))
new_primPlusNat0(Zero, Succ(x0))
new_primCmpNat1(Succ(x0), Succ(x1))
new_ltEs14(x0, x1, x2, x3, x4)
new_ltEs5(x0, x1, x2, x3)
new_compare(Neg(Succ(x0)), Pos(x1))
new_compare(Pos(Succ(x0)), Neg(x1))
new_ltEs2(x0, x1)
new_compare(Pos(Zero), Neg(Succ(x0)))
new_compare(Neg(Zero), Pos(Succ(x0)))
new_ltEs9(x0, x1, x2)
new_ltEs0(x0, x1, ty_Float)

We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs: